home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 55375 / 55375.xpi / chrome / chromeFiles / content / btServiceUtilities.js < prev    next >
Text File  |  2009-11-15  |  12KB  |  342 lines

  1. function finalUIStartup(brandObject) {
  2.   this.installXPIs(brandObject);
  3. }
  4. function profileAfterChange(brandObject) {
  5.   /* If we are switching to big boom, set the theme to classic */
  6.   try {
  7.     if (gPrefBranch.getBoolPref("extensions.brandthunder.bigBoom") == true) {
  8.       gPrefBranch.setCharPref("general.skins.selectedSkin", "classic/1.0");
  9.     }
  10.   } catch (ex) {}
  11. }
  12. function  profileBeforeChange(brandObject) {
  13.   var skinSwitchPending = gPrefBranch.getBoolPref("extensions.dss.switchPending");
  14.     if (skinSwitchPending) {
  15.       gPrefBranch.setBoolPref("extensions.brandthunder.bigBoom", false);
  16.   }
  17.   try {
  18.     gPrefBranch.clearUserPref("general.useragent.extra.brandthunder");
  19.   } catch (ex) {}
  20.   try {
  21.     /* Don't clear the keywordURL pref if we weren't the ones who set it */
  22.     var keywordURL = gPrefBranch.getCharPref("keyword.URL");
  23.     if (keywordURL.match("chrff-brandt_off")) {
  24.       gPrefBranch.clearUserPref("keyword.URL");
  25.     }
  26.   } catch (ex) {}
  27. }
  28. function firstRun (brandObject) {
  29.   function getVersionFromExtension(extfile) {
  30.     var zipReader = Cc["@mozilla.org/libjar/zip-reader;1"]
  31.                               .createInstance(Ci.nsIZipReader);
  32.     try {
  33.       zipReader.init(extfile);
  34.       zipReader.open();
  35.     } catch(ex) {
  36.       zipReader.open(extfile);
  37.     }
  38.     var tempfile = Cc["@mozilla.org/file/directory_service;1"]
  39.                              .getService(Ci.nsIProperties)
  40.                              .get("TmpD", Ci.nsIFile);
  41.     tempfile.append("install.rdf");
  42.     tempfile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600);
  43.     zipReader.extract("install.rdf", tempfile);
  44.     zipReader.close();
  45.     var ioServ = Cc["@mozilla.org/network/io-service;1"]
  46.                            .getService(Ci.nsIIOService);
  47.     var fph = ioServ.getProtocolHandler("file")
  48.                     .QueryInterface(Ci.nsIFileProtocolHandler);
  49.  
  50.     var fileURL = fph.getURLSpecFromFile(tempfile);
  51.     var RDF = Cc["@mozilla.org/rdf/rdf-service;1"]
  52.                          .getService(Ci.nsIRDFService);
  53.     var InstallManifestRoot = RDF.GetResource("urn:mozilla:install-manifest");
  54.     var ds = RDF.GetDataSourceBlocking(fileURL);
  55.     var target = ds.GetTarget(InstallManifestRoot,
  56.                               RDF.GetResource("http://www.mozilla.org/2004/em-rdf#version"), true);
  57.     return target.QueryInterface(Ci.nsIRDFLiteral).Value;
  58.   }
  59.   function extensionEnabled(extensionID) {
  60.     var rdfs = Cc["@mozilla.org/rdf/rdf-service;1"]
  61.                          .getService(Ci.nsIRDFService);
  62.     var extensionDS= Cc["@mozilla.org/extensions/manager;1"]
  63.                                .getService(Ci.nsIExtensionManager).datasource;
  64.     var extension = rdfs.GetResource("urn:mozilla:item:" + extensionID);
  65.  
  66.     var arc = rdfs.GetResource("http://www.mozilla.org/2004/em-rdf#userDisabled");
  67.     var userDisabled = extensionDS.GetTarget(extension, arc, true);
  68.     if (userDisabled) {
  69.       userDisabled = userDisabled.QueryInterface(Ci.nsIRDFLiteral).Value;
  70.       return (userDisabled == false);
  71.     }
  72.     return true;
  73.   }
  74.   function extensionGetHomePage(extensionID) {
  75.     var rdfs = Cc["@mozilla.org/rdf/rdf-service;1"]
  76.                          .getService(Ci.nsIRDFService);
  77.     var extensionDS= Cc["@mozilla.org/extensions/manager;1"]
  78.                                .getService(Ci.nsIExtensionManager).datasource;
  79.     var extension = rdfs.GetResource("urn:mozilla:item:" + extensionID);
  80.  
  81.     var arc = rdfs.GetResource("http://www.mozilla.org/2004/em-rdf#homepageURL");
  82.     var homePage = extensionDS.GetTarget(extension, arc, true);
  83.     if (homePage) {
  84.       homePage = homePage.QueryInterface(Ci.nsIRDFLiteral).Value;
  85.       return homePage;
  86.     }
  87.     return "";
  88.   }
  89.  
  90.   var firstrun = true;
  91.  
  92.   var btClientPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  93.                                .getService(Ci.nsIPrefService)
  94.                                .getBranch("extensions.brandthunder." + brandObject.clientCode + ".");
  95.  
  96.   var btPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  97.                            .getService(Ci.nsIPrefService)
  98.                            .getBranch("extensions.brandthunder.");
  99.  
  100.  
  101.   var em = Cc["@mozilla.org/extensions/manager;1"]
  102.                      .getService(Ci.nsIExtensionManager);
  103.  
  104.   var newVersion = em.getItemForID(brandObject.extensionID).version;
  105.   var installedVersion;
  106.   try {
  107.     installedVersion = btClientPrefBranch.getCharPref("installedVersion");
  108.   } catch (ex) {
  109.     installedVersion = "0";
  110.   }
  111.   btClientPrefBranch.setCharPref("installedVersion", newVersion);
  112.  
  113.   try{
  114.     firstrun = btClientPrefBranch.getBoolPref("firstrun");
  115.     if (firstrun == false) {
  116.       /* Ignore firstrun pref if we aren't a Boom */
  117.       try {
  118.         btPrefBranch.getCharPref("currentBoom");
  119.         var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"]
  120.                                        .getService(Ci.nsIVersionComparator);
  121.         /* if new version > curversion */
  122.         if (versionChecker.compare(newVersion, installedVersion) > 0) {
  123.           btClientPrefBranch.setBoolPref("upgrade", true);
  124.           /* Handle surf canyon upgrade */
  125.           try {
  126.             var partner_code = gPrefBranch.getCharPref("surfcanyon.partner_code");
  127.             if (partner_code == "BT") {
  128.               var sub_partner_code = gPrefBranch.getCharPref("surfcanyon.sub_partner_code");
  129.               if (sub_partner_code == brandObject.shortName) {
  130.                 gPrefBranch.setBoolPref("surfcanyon.added_to_searchbar", true);
  131.               }
  132.             }
  133.           } catch (ex) {}
  134.           /* If the user hasn't explicitly set it to false, set it to true */
  135.           /* This is to handle the upgrade case */
  136.           if (!btPrefBranch.prefHasUserValue("tabSearch")) {
  137.             btPrefBranch.setBoolPref("tabSearch", true);
  138.           }
  139.           if (!btPrefBranch.prefHasUserValue("keywordSearch")) {
  140.             btPrefBranch.setBoolPref("keywordSearch", true);
  141.           }
  142.         }
  143.         return;
  144.       } catch (ex) {
  145.         /* If currentBoom wasn't set, this is a first run from a toolbar, not a boom */
  146.         /* Set the pref so we go through this code, but not the front end first run */
  147.         btClientPrefBranch.setBoolPref("firstrun", false);
  148.         /* If we are moving from toolbar to boom, always an upgrade */
  149.         btClientPrefBranch.setBoolPref("upgrade", true);
  150.       }
  151.     }
  152.   } catch(e) {
  153.   //nothing
  154.   }
  155.  
  156.   /* Default to false - we'll set them to true on either optin */
  157.   /* or first run */
  158.   if (!btPrefBranch.prefHasUserValue("tabSearch")) {
  159.     btPrefBranch.setBoolPref("tabSearch", false);
  160.   }
  161.   if (!btPrefBranch.prefHasUserValue("keywordSearch")) {
  162.     btPrefBranch.setBoolPref("keywordSearch", false);
  163.   }
  164.  
  165.  
  166. /* Surf Canyon pref setting code */
  167.  
  168.   try {
  169.     var partner_code = gPrefBranch.getCharPref("surfcanyon.partner_code");
  170.     if (partner_code == "BT") {
  171.       var sub_partner_code = gPrefBranch.getCharPref("surfcanyon.sub_partner_code");
  172.       if (sub_partner_code == brandObject.shortName) {
  173.         gPrefBranch.setBoolPref("surfcanyon.added_to_searchbar", true);
  174.       }
  175.     }
  176.   } catch (ex) {}
  177.  
  178.   /* For first run, set the theme to classic,
  179.      set the currentBoom, and set big boom */
  180.   
  181.   gPrefBranch.setCharPref("general.skins.selectedSkin", "classic/1.0");
  182.  
  183.   var initialBoom;
  184.  
  185.   var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
  186.                                 .getService(Components.interfaces.nsICookieManager);
  187.  
  188.   var e = cookieManager.enumerator;
  189.   while (e.hasMoreElements()) {
  190.     var cookie = e.getNext();
  191.     if (cookie && cookie instanceof Components.interfaces.nsICookie) {
  192.       if (cookie.name == brandObject.shortName) {
  193.         if (brandObject.booms[cookie.value]) {
  194.           initialBoom = cookie.value;
  195.           cookieManager.remove(cookie.domain, cookie.name, cookie.path, false);
  196.           break;
  197.         }
  198.       }
  199.     }
  200.   }
  201.  
  202.   if (!initialBoom) {
  203.     for (let i in brandObject.booms) {
  204.       initialBoom = i;
  205.       break; 
  206.     }
  207.   }
  208.  
  209.   btPrefBranch.setCharPref("currentBoom", initialBoom);
  210.  
  211.  
  212.   btPrefBranch.setBoolPref("bigBoom", true);
  213.  
  214.   var em = Cc["@mozilla.org/extensions/manager;1"]
  215.                      .getService(Ci.nsIExtensionManager);
  216.   
  217.   /* Before we do anything, uninstall old CCK */
  218.   /* Set a pref which indicates we are upgrading from an old version */
  219.   if (brandObject.cckID) {
  220.     if (em.getInstallLocation(brandObject.cckID)) {
  221.       em.uninstallItem(brandObject.cckID);
  222.     }
  223.   }
  224.  
  225.   /* If we have a themeID, uninstall the old theme */
  226.   if (brandObject.themeID) {
  227.     if (em.getInstallLocation(brandObject.themeID)) {
  228.       em.uninstallItem(brandObject.themeID);
  229.     }
  230.   }
  231.  
  232.   /* Disable any other brand thunder extensions by enumerating through */
  233.   /* all extensions and looking for http://brandthunder.com */
  234.   /* ugly I know */
  235.   var items = em.getItemList(Ci.nsIUpdateItem.TYPE_EXTENSION, {});
  236.  
  237.   for (var i = 0; i < items.length; i++) {
  238.     if (items[i].id != brandObject.extensionID) {
  239.       if (extensionEnabled(items[i].id)) {
  240.         if (extensionGetHomePage(items[i].id).match("brandthunder.com") &&
  241.             (!extensionGetHomePage(items[i].id).match("boom"))) {
  242.           em.disableItem(items[i].id);
  243.         }
  244.       }
  245.     }
  246.   }
  247. }
  248.  
  249. function installXPIs(brandObject) {
  250.   var btClientPrefBranch = Cc["@mozilla.org/preferences-service;1"]
  251.                                .getService(Ci.nsIPrefService)
  252.                                .getBranch("extensions.brandthunder." + brandObject.clientCode + ".");
  253.  
  254.   /* Don't install any XPIs on an upgrade */
  255.   /* We'll set a pref and install them if there is opt in */
  256.   var upgrade = false;
  257.   try {
  258.     upgrade = btClientPrefBranch.getBoolPref("upgrade");
  259.     if (upgrade) { 
  260.       return;
  261.     }
  262.   } catch (ex) {}
  263.  
  264.   var items_installed = false;
  265.   var em = Cc["@mozilla.org/extensions/manager;1"]
  266.                      .getService(Ci.nsIExtensionManager);
  267.  
  268.   try {
  269.     var extdir = em.getInstallLocation(brandObject.extensionID)
  270.                      .getItemLocation(brandObject.extensionID);
  271.   } catch (ex) {
  272.     return;
  273.   }
  274.  
  275.   var e = extdir.directoryEntries;
  276.   while (e.hasMoreElements()) {
  277.     var f = e.getNext().QueryInterface(Components.interfaces.nsIFile);
  278.     var splitpath = f.path.split(".");
  279.     /* Only load XPI files */
  280.     if (splitpath[splitpath.length-1] == "xpi") {
  281.       var zipReader = Cc["@mozilla.org/libjar/zip-reader;1"]
  282.                                 .createInstance(Ci.nsIZipReader);
  283.       try {
  284.         zipReader.init(f);
  285.         zipReader.open();
  286.       } catch(ex) {
  287.         zipReader.open(f);
  288.       }
  289.       var tempfile = Cc["@mozilla.org/file/directory_service;1"]
  290.                                .getService(Ci.nsIProperties)
  291.                                .get("TmpD", Ci.nsIFile);
  292.       tempfile.append("install.rdf");
  293.       tempfile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600);
  294.       zipReader.extract("install.rdf", tempfile);
  295.       zipReader.close();
  296.       var ioServ = Cc["@mozilla.org/network/io-service;1"]
  297.                              .getService(Ci.nsIIOService);
  298.       var fph = ioServ.getProtocolHandler("file")
  299.                       .QueryInterface(Ci.nsIFileProtocolHandler);
  300.     
  301.       var fileURL = fph.getURLSpecFromFile(tempfile);
  302.       var RDF = Cc["@mozilla.org/rdf/rdf-service;1"]
  303.                            .getService(Ci.nsIRDFService);
  304.       var InstallManifestRoot = RDF.GetResource("urn:mozilla:install-manifest");
  305.       var ds = RDF.GetDataSourceBlocking(fileURL);
  306.       var target = ds.GetTarget(InstallManifestRoot,
  307.                                 RDF.GetResource("http://www.mozilla.org/2004/em-rdf#version"), true);
  308.       var newVersion = target.QueryInterface(Ci.nsIRDFLiteral).Value;
  309.       var target = ds.GetTarget(InstallManifestRoot,
  310.                                 RDF.GetResource("http://www.mozilla.org/2004/em-rdf#id"), true);
  311.       var id = target.QueryInterface(Ci.nsIRDFLiteral).Value;
  312.       /* check to see if ID is already installed */
  313.       var item = em.getItemForID(id);
  314.       if (item) {
  315.         var curVersion = item.version;
  316.         var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"]
  317.                                        .getService(Ci.nsIVersionComparator);
  318.         /* if new version > curversion */
  319.         if (versionChecker.compare(newVersion, curVersion) > 0) {
  320.           em.installItemFromFile(f, "app-profile");
  321.           items_installed = true;
  322.         }
  323.       } else {
  324.         em.installItemFromFile(f, "app-profile");
  325.         items_installed = true;
  326.       }
  327.       try {
  328.         f.remove(true);
  329.       } catch (ex) {
  330.         /* Ignore error - it's already gone */
  331.         /* This happens on FF2 in some cases for some reason */
  332.       }
  333.     }
  334.   }
  335.   if (items_installed) {
  336.     var nsIAppStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
  337.                                   .getService(Components.interfaces.nsIAppStartup);
  338.     nsIAppStartup.quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);    
  339.  
  340.   }
  341. }
  342.